#ifndef LISTA_H
#define LISTA_H

#include <iostream>
#include "Iterable.h"
using namespace std;

template <class T>
class Lista :public Iterable<T>{

public:

	// PRE: -
	// POS: Destructor
	virtual ~Lista() { }

	// PRE: -
	// POS: Agrega el elemento e al principio de la lista
	virtual void Agregar(const T &e) =0;

	// POS: Agrega el elemento e al final de la lista
	virtual void AgregarFinal(const T &e) =0;
	
	// PRE: -
	// POS: Borra el primer elemento de la lista. Si no hay elementos no tiene efecto
	virtual void Borrar(const T) =0;

	// PRE: -
	// POS: Vacia la lista
	virtual void Vaciar() =0;

	// PRE: -
	// POS: Retorna true si la lista esta vacia
	virtual bool EsVacia() const =0;
	//virtual Puntero<Iterador<T>> ObtenerIterador() const =0;
	// PRE: -
	// POS: Retorna el largo de la lista
	virtual unsigned int Largo() const =0;
	virtual void mostrar(int) =0;
	virtual bool EsMiembro(T) =0;
	

};


#endif